package com.tjetc.reflect;

import java.lang.reflect.Method;
import java.util.Arrays;

public class _4ClassMethods {
    /*
    static Class forName(String name)               //返回指定类名name的Class对象
    Object newInstance()                            //调用缺省构造函数，返回该Class对象的一个实例
    getName()                                       //返回此Class对象所表示的实体(类、接口、数组类、基本类型等)名称
    Class[] getInterfaces()                         //获取当前Class对象的接口
    ClassLoader getClassLoader()                    //返回该类的类加载器
    Class getSuperclass()                           //返回表示此Class所表示的实体的超类的Class
    Constructor[] getConstructors()                 //返回一个包含某些Constructor对象的数组
    Field[] getDeclaredFields()                     //返回Field对象的一个数组
    Method getMethod(String name.Class paramTypes)  // 返回一个Method对象，此对象的形参类型为paramType

     */

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException {
        Class cls = Class.forName("com.tjetc.reflect._1Cat");
        // 不推荐 已经过期 应该使用替代的方法 调用对象的无参构造 应该先获取构造器通过构造器的方式进行创建
        Object o = cls.newInstance();
        // 获取运行时的类型
        System.out.println(o.getClass());

        // 返回此Class对象所表示的实体(类、接口、数组类、基本类型等)名称
        System.out.println(cls.getName());

        // 获取所有实现的接口
        Class[] interfaces = cls.getInterfaces();
        System.out.println(Arrays.toString(interfaces));

        // 深入理解JVM 重要！！！！！！！
        /*
            1.应用程序类加载器
            2.扩展类加载器
            3.引导类加载器

         */
        ClassLoader classLoader = cls.getClassLoader();
        System.out.println(classLoader);

        // 获取父类型
        System.out.println(cls.getSuperclass());
        // 获取有参数的方法
        Method method = cls.getMethod("f", String.class);
        System.out.println(method.getName());

        // Integer.class
        // 如果想要确定参数就是int Integer.TYPE
        Method method1 = cls.getMethod("f1", Integer.TYPE);
        System.out.println(method1);

        // 获取包名
        System.out.println(cls.getPackage().getName());

    }
}
